package xin.marcher.wind.migrate.mapper;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import xin.marcher.wind.migrate.domain.entity.EtlBinlogConsumeRecordDO;

import java.util.Date;
import java.util.List;

/**
 * binlog 消息同步消费记录表 Mapper
 */
@Repository
public interface EtlBinlogConsumeRecordMapper {

    /**
     * 新增消费记录
     *
     * @param consumeRecord 消费记录
     */
    void insert(EtlBinlogConsumeRecordDO consumeRecord);

    /**
     * 更新消费记录状态
     *
     * @param consumeRecord 要更新的消费记录
     */
    void updateConsumeRecordStatus(EtlBinlogConsumeRecordDO consumeRecord);

    /**
     * 批量更新消费记录状态
     *
     * @param queueId           消息队列id
     * @param consumeStatus     消费状态
     * @param consumeRecordList 要更新的消费记录集合
     */
    void batchUpdateConsumeRecordStatus(@Param("queueId") Integer queueId, @Param("consumeStatus") Integer consumeStatus, @Param("list") List<EtlBinlogConsumeRecordDO> consumeRecordList);

    /**
     * 取得未消费的记录
     *
     * @return 未消费的记录
     */
    List<EtlBinlogConsumeRecordDO> getNotConsumedRecords();

    /**
     * 取得未提交的记录
     *
     * @return 未提交的记录
     */
    List<EtlBinlogConsumeRecordDO> getNotCommittedConsumedRecords(@Param("topic") String topic);

    /**
     * 删除已提交的记录，提交过的记录就无用了可以删除了
     *
     * @return
     */
    List<EtlBinlogConsumeRecordDO> deleteCommittedConsumedRecords(@Param("updateTime") Date updateTime);

    /**
     * 根据队列 ID 的偏移量获取消息同步记录
     *
     * @param queueId 队列ID
     * @param offset  偏移量
     * @param topic   消息主题
     * @return 消息同步记录
     */
    EtlBinlogConsumeRecordDO getExistsRecord(@Param("queueId") Integer queueId, @Param("offset") Long offset, @Param("topic") String topic);
}
